Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO
■マウスインターフェース
解説  o マウスインターフェースのサポート状況
	PC-9801初代・E・F1・F2: PC-9871初代・K(マウスインターフェースボード)を
	                     実装可能
	PC-98LT・HA, DB-P1  : マウスインターフェースのサポートなし
	PC-9801F3・M2・M3    : マウスインターフェース標準内蔵(PC-9871互換型)
	その他             : マウスインターフェース標準内蔵
      o マウスインターフェースの種類と使用するI/Oポート
	-------------------------+----------------------------------------
	機種                     |使用するI/Oポート
	-------------------------+----------------------------------------
	ノーマル(PC-9871互換)*1  |7FD9〜7FDFh
	ノーマル(PC-9801VM互換)  |7FD9〜7FDFh, BFDBh,        98D7h(*2)
	ノーマル(PC-H98)         |7FD9〜7FDFh, BFDBh, 0869h, 98D7h
	ハイレゾ                 |0061〜0067h
	ハイレゾ(PC-H98)         |0061〜0067h,        0869h, 98D7h
	-------------------------+----------------------------------------
	*1: PC-9871初代・K, PC-9801F3・M2・M3内蔵
	*2: I/O 98D7hは、一部機種のみサポート
      o 一部の98NOTEはサムボールという専用のポインティングデバイスを内蔵
	しているが、ソフトウェアからは外付バスマウスと同様に見える。サム
	ボールと外付バスマウスとは排他的に使用される。
      o PC-9801Pは、PEN-BIOSがペンによるマウスのエミュレーションを行う。
	ソフトウェアからは外付バスマウスと同様に見える。
      o PC-98GS,PC-9821初代・Ap・As・Ae・Af・Ap2・As2・An・Ap3・As3・Ce・Cs2・Ce2では、
	マウスコネクタにマウス変換コネクタ(PC-98DO/P-11)を接続すると、
	マウスコネクタがスティックポートに切り替わり、MSXジョイスティックが
	使用できるようになる。
	ジョイスティックの状態は、FM音源LSI(YM2608)から読み出す。
	関連	I/O 0188h,018Ah
      u マウスインターフェースとジョイスティックポートの切り換えは、リセット
	時に行われる。マウス変換コネクタは、内部でマウスコネクタ側の7番ピンを
	220Ωの抵抗でプルアップしている。本体のハードウェアがこれを判別して
	マウスインターフェースとジョイスティックポートの切り換えを行う。
	マウス変換コネクタが接続されているかどうかをソフト的に読み出すことは
	できない。
      u 一部の機種のマウスインターフェースは、マウスの中ボタンをサポートして
	いる。マウスコネクタの7番ピンが中ボタンの信号に割り当てられている。た
	だし、マウス変換コネクタが使用可能な機種では、7番ピンでマウス変換
	コネクタが接続されているかどうかを調べるため、中ボタンをサポートして
	いない。
	中ボタンのサポートを確認した機種は、PC-9871初代, PC-9801VX21・RA21・US,
	PC-H98S。中ボタンの非サポートを確認した機種は、マウス変換コネクタが
	使用可能な機種以外では、PC-9821Xa。
      o PC-9871初代・K,PC-9801F3・M2・M3では、マウスインターフェースが発生する
	割り込みの周期をソフトウェアから変更することができない。ボード上の
	ストラップスイッチで割り込み周期を変更する。出荷時設定は120Hz。
      o PC-9871初代・Kは、ボード上のDIP SWでI/Oポートアドレスを変更できる。
	[SW1,SW2 : I/Oポートアドレス]
	  AB15 = 0	AB7  = 1
	  AB14 = SW1-1	AB6  = 1
	  AB13 = SW1-2	AB5  = 0
	  AB12 = SW1-3	AB4  = 1
	  AB11 = SW1-4	AB3  = SW2-4
	  AB10 = SW2-1	AB2  = A1
	  AB9  = SW2-2	AB1  = A0
	  AB8  = SW2-3	AB0  = 1
	    ON=1,OFF=0
	    デフォルトは全部ON
	* 一部のテクニカルデータブックで、AB3が未デコードのように記述されて
	  いる場合があるが、実際には16ビットデコードされている。
	
関連	INT 1Fh	- Function 9B08h■[PC-9801P]
	I/O 8C1Eh(表) bit 5,4■[PC-9801P]
	I/O 8C1Eh(表) bit 5■[PC-9821Ne]
I/O	7FD9h,7FDBh,7FDDh,7FDFh
名前	マウスインターフェースの入出力
対象	ノーマル(PC-9801初代・E・F1・F2を除く), 
	PC-9871初代・K(マウスインターフェースボード)
チップ	8255A相当品
機能
	-----------+----+---+--------------------------------------------------
	I/Oアドレス|幅  |R/W|内容
	-----------+----+---+--------------------------------------------------
	7FD9h      |BYTE|R/W|8255A ポートA リード/ライトデータ
	7FDBh      |BYTE|R/W|8255A ポートB リード/ライトデータ
	7FDDh      |BYTE|R/W|8255A ポートC リード/ライトデータ
	7FDFh      |BYTE| W |8255A コントロールレジスタ
	-----------+----+---+--------------------------------------------------
	●7FD9h,Read/Write: 8255A ポートA リード/ライトデータ
	bit 7: LEFT…マウスの左ボタン状態
	    1= OFF
	    0= ON
	bit 6: MIDDLE…マウスの中ボタン状態 ■Undocumented
	    1= OFF
	    0= ON
	      * マウス変換コネクタ(PC-98DO/P-11)が接続可能な機種など、
		一部の機種では未使用(常に1)。
	bit 5: RIGHT…マウスの右ボタン状態
	    1= OFF
	    0= ON
	bit 4: 未使用
	      * 値は機種により不定。PC-9871(マウスインターフェースボード)は0
	
	bit 3〜0: MD3〜MD0…SXY,SHLで選択されたカウンタの値
	解説  o 8255Aを「モード0入力」に設定し、マウスの状態取得に使用する。
	      u 本体BIOSが8255Aの初期化を行う機種と行わない機種がある。ITF ROM
		を搭載する機種は必ず初期化を行う模様。ただし、初期化を行わ
		なくても、8255Aはリセット時に「モード0入力」に設定されている。
	●7FDBh,Read/Write: 8255A ポートB リード/ライトデータ
	bit 7: 未使用
	      * PC-98RLのハイレゾモードでは、マウスインターフェース ポートB
		(I/O 0063h)bit 7からDIP SW 1-4の状態が読み出せるが、PC-98RLの
		ノーマルモードでは読めない。
	bit 6: RAMKL…DIP SW 3-6の状態 ■[内蔵RAM切り離し機能のある機種]
	    1= 80000〜9FFFFhの内蔵RAMを使用する
	    0= 80000〜9FFFFhの内蔵RAMを切り離す
	      * PC-98RLでは、DIP SW 3-6の状態は読み出せるが、内部RAMは
		切り離されない。
	      * PC-9801UV21は640KBのRAMを内蔵しているが、DIP SW 3-6でRAM切り
		離しができないので、このビットは未使用。
	bit 5: 未使用
	bit 4: 内蔵HD I/FのDMAチャネル ■[PC-98RL]
	    1= DMAチャネル0を使用
	    0= DMAチャネル1を使用
	      * '93年版テクニカルデータブック(HARDWARE編)のp.111には、
		このポートのbit 4が内蔵HD I/FのDMAチャネル(システムセット
		アップメニューで設定)を示すとだけ記述されているが、PC-98RL
		以外の機種は、I/O 00F6h bit 4が変化する。
	    関連	0000:0484h bit 7,6
	bit 3,2: 未使用
	bit 1: SPDSW…80286クロック切換SWの状態■[PC-9801RX2・RX21・EX・LX・DX]
	    1= 10MHz
	    0= 12MHz
	      * '93年版テクニカルデータブック(HARDWARE編)のp.241には、
		このビットがi386 CPUのクロックを示す場合があるように記述されて
		いるが、調査した範囲では12MHzの80286 CPU搭載機のみ変化した。
		12MHz 80286 CPU搭載機以外は未使用。
	    関連	0000:0484h bit 3〜0
	bit 0: 未使用
	解説  o 8255Aを「モード0入力」に設定して、本体のDIP SWなどの状態取得に
		使用する。
	      u 本体BIOSが8255Aの初期化を行う機種と行わない機種がある。ITF ROM
		を搭載する機種は必ず初期化を行う模様。初期化を行わなくても、
		8255Aはリセット時に「モード0入力」に設定されている。
	●7FDDh,Read: 8255A ポートC リードデータ
	bit 7〜4: 「ポートC ライトデータ」を参照
	bit 3: MODSW…ノーマル/ハイレゾモード状態 ■[PC-98XL・XL^2・RL]
	    1= ノーマルモード
	      * PC-98XL・XL^2・RLでは、このビットにハイレゾ・ノーマルモード
		切り換えスイッチの状態が反映する。その他の機種では不定
		(PC-9801VM2・FA等は0、PC-9821は1など)。
	bit 2: CPUSW…DIP SW 3-8の状態 ■[80286以降のCPU搭載機]
	    1= OFF(V30選択)
	    0= ON(80x86選択)
	      * V30非搭載機でも、V30相当モードのときはこのビットが1になる。
	bit 1,0: RS-2,RS-1…DIP SW 1-6,1-5の状態
	    1= ON
	    0= OFF
	      * RS-232C同期モードの設定状態。PC-9801UV2・UV21は、DIP SW 1-6,
		1-5でRS-232C同期モードを変更できるが、このビットからDIP SWの
		状態を読み出すことはできない模様(解説欄参照)。
	    関連	DIP SW 1-6,1-5
	解説  o	8255Aに対して、bit 7〜4は「モード0出力」に設定しマウス
		インターフェースの制御に使用する。bit 3〜0は「モード0入力」に
		設定し本体のDIP SWなどの状態取得に使用する。
	      o	bit 3〜0は、PC-9871初代・K,PC-9801F3・M2・M3・VM2・VF・U・UV2では
		未使用(有意な情報は得られない)。
		PC-9801UV21については、テクニカルデータブック増補版・増補改訂版
		・増補改訂2版では未使用となっているが、新版テクニカルデータ
		ブック以降では有効であるような記述になっている。実機での動作は
		未確認。
		PC-9801LV・CV・UV11・VM11・N,PC-98DOは、テクニカルデータブックの
		記述から推定して有効と思われるが、本体BIOSはこのポートの読み
		出しを行っていない。
		ITF ROMを搭載する機種は、ITFでこのポートの読み出しを行う。PC-
		9801VM21・UR・UF・NV・NLと80286以降のCPUを搭載した機種はITF ROMを
		搭載しているため、このポートの読み出しをサポートしている。
	      u 本体BIOSが8255Aの初期化を行う機種と行わない機種がある。ITF ROM
		を搭載する機種は必ず初期化を行う模様。初期化を行わなくても
		リセット時に8255Aは「モード0入力」に設定されているので、
		bit 3〜0の読み出しには支障がない。ただし、PC-9801VM等のために
		開発されたマウスドライバを組み込んだ場合、ポートCを全て出力
		モードに設定してしまうことがあるため、bit 3〜0が読み出せない
		場合がありうる。
	●7FDDh,Write: 8255A ポートC ライトデータ
	bit 7: HC
		マウスインターフェース上のカウンタとラッチの制御用ビット。
		このビットを0→1に変化させると、そのときのカウンタの値が
		ラッチされ、カウンタの値がクリアされる。動作の詳細は以下の
		通り。
		
		HC
		0  1
		|          +------+                       |
		|          |ロータリ  |    +----+    +---+    |8255A
		|          |エンコーダ|===>|カウンタ|===>|ラッチ|===>|PORT A bit 3〜0
		|          +------+    +----+    +---+    |(MD3〜MD0)
		|        HC=0のとき、SXY,SHLで選択したカウンタの現在の値が
		|        MD3〜MD0からリアルタイムに読める。データはラッチを
		|        素通りする。
		+--+
		   |                    リセット
		   |       +------+      ↓               |
		   |       |ロータリ  |    +----+    +---+    |8255A
		   |       |エンコーダ|===>|カウンタ|    |ラッチ|===>|PORT A bit 3〜0
		   |       +------+    +----+    +---+    |(MD3〜MD0)
		   |     HCを0→1に変化させると、8255Aの外部回路により、その
		   |     瞬間のカウンタの値がラッチされる。また、同時に
		   |     カウンタの値が0にリセットされる。
		   |     HC=1の状態でマウスを動かしても、MD3〜MD0から読める
		   |     カウンタの値は変化しない。ラッチした状態で、SXY,SHLの
		   |     ビットを変化させれば、それに対応した(ラッチされた
		   |     ときの)カウンタの値が読み出せる。
		   |
		   |     カウンタは、リセットされたあと、HC=1の間もマウスが
		   |     動けばカウント動作を行う。
		+--+
		|
		
		マウスドライバ等でマウスの動きを取得するときには、一定時間
		ごとに次のような手順で行う。
		HCを0→1にする。HC=1を保ったままSXY,SHLを変化させて、
		カウンタ(ラッチ)の内容をすべて引き取る。引き取った値は、
		前回カウンタの内容を読み出したときから現在までのマウスの
		移動量を示している。
	bit 6,5: SXY,SHL
	    11b= Y軸方向上位4ビットデータ
	    10b= Y軸方向下位4ビットデータ
	    01b= X軸方向上位4ビットデータ
	    00b= X軸方向下位4ビットデータ
	      * MD3〜MD0に出力するデータを選択
	bit 4: INT#
	    1= 割り込み禁止
	    0= 割り込み許可
	      * マウスのタイマ割り込み要求のマスク制御。割り込み禁止にすると、
		マウスインターフェースからの割り込み出力信号線はハイ
		インピーダンス状態になる。
	bit 3〜0: リードモードのため出力不可
	解説  o	8255Aに対して、bit 7〜4は「モード0出力」に設定しマウス
		インターフェースの制御に使用する。bit 3〜0は「モード0入力」に
		設定し本体のDIP SWなどの状態取得に使用する。
		「7FDDh,Read」を参照。
	●7FDFh,Write: コントロールレジスタ
	解説  o	8255Aのコントロールレジスタ。詳細は8255Aのデータシートを参照。
	      o ITF ROM搭載機が発行する初期化コマンドは93h。
I/O	BFDBh
名前	マウス割り込みタイマ設定
対象	マウスインターフェース内蔵機(PC-9801F3・M2・M3を除く)のノーマルモード
チップ	
機能
	-----------+----+---+--------------------------------------------------
	I/Oアドレス|幅  |R/W|内容
	-----------+----+---+--------------------------------------------------
	BFDBh      |BYTE| R |設定値読み出し
	BFDBh      |BYTE| W |マウス割り込み周期設定
	-----------+----+---+--------------------------------------------------
	●BFDBh,Read ■Undocumented
	bit 7〜0: 設定値読み出し
		* 一部機種のみ
	●BFDBh,Write
	bit 7〜2: 000000b=マウス割り込み周期設定
	          000010b=不明
	bit 1,0: T1,T0…マウス割り込み周期
		11b= 15Hz
		10b= 30Hz
		01b= 60Hz
		00b=120Hz(リセット時初期値)
解説  o マウスインターフェースが発生する割り込みの周期を設定する。ポートCの
	bit 4(INT#)を0(割り込み許可)にすると、このポートで設定した周期で
	定期的に割り込みが発生するようになる。
      o このポートは、PC-9871初代・K,PC-9801F3・M2・M3にはない。これらの機種では
	ボード上のストラップスイッチで割り込み周期を変更できる。出荷時設定は
	120Hz。
	ハイレゾモードは、このポートと同様の機能を持たない。常に120Hz周期で
	割り込みを発生する。
      u BIOS(セグメントFD80h)の初期化時、必ずI/O BFDBhに08hを出力する処理が
	ある(PC-9801U以降の全ての機種で)。意味は不明。
      u 一部の機種では、このポートをリードすると、ライトした内容が読める。
	調査を行った機種の結果を以下に示す。
	PC-9801DA : 常にFFh
	PC-H98S   : bit 7〜2=常に111111b, bit 1,0=ライトした値
	PC-9801US : bit 3,2 =常に00b, bit 7〜4,1,0=ライトした値
	PC-9821Xa : bit 7〜2=常に000000b, bit 1,0=ライトした値
関連	I/O 7FDDh bit 4
I/O	0869h
名前	マウス割り込みペンディングビット
	Undocumented
対象	PC-H98
チップ	
機能
	●Read
	bit 7: マウスの割り込みペンディングビット
	    1= マウスからの割り込み
	    0= その他のデバイスからの割り込み
	bit 4: マウスの割り込みモード
	    1= レベルモード
	    0= エッジモード
	bit 6,5,3〜0: 不明
解説  o PC-H98は、割り込みモードをレベルモードに設定すると、割り込み信号線を
	シェアリングできる。割り込みをシェアリングしているとき、割り込み
	ハンドラのなかで、割り込みを発生させたデバイスを判断するために利用
	する。
      o bit 7は、一度読み込みを行うとビットの内容はクリアされる。
	
	
	
	
I/O	98D7h
名前	マウス割り込みベクタ設定
	Undocumented
対象	PC-H98,PC-9821(初代・Ceを除く),PC-9801BA2・BS2・BX2・BA3・BX3・BX4・NS/A・NL/A
	
チップ	
機能
	[READ/WRITE]
	bit 7,6: 不明
	bit 5: 未使用(常に0)
	bit 4〜1: マウス割り込みベクタ
		0110b= INT6
		0101b= INT5
		0100b= INT41
		0011b= INT3
		0010b= INT2
		0001b= INT1
		0000b= INT0
	bit 0: マウス割り込み許可
		1= 許可
		0= 禁止
解説  o マウス割り込みベクタを設定する。
	
	
I/O	0061h,0063h,0065h,0067h
名前	マウスインターフェースの入出力
対象	ハイレゾ
チップ	8255A相当品
機能
	-----------+----+---+--------------------------------------------------
	I/Oアドレス|幅  |R/W|内容
	-----------+----+---+--------------------------------------------------
	0061h      |BYTE|R/W|8255A ポートA リード/ライトデータ
	0063h      |BYTE|R/W|8255A ポートB リード/ライトデータ
	0065h      |BYTE|R/W|8255A ポートC リード/ライトデータ
	0067h      |BYTE| W |8255A コントロールレジスタ
	-----------+----+---+--------------------------------------------------
	●0061h,Read/Write: 8255A ポートA リード/ライトデータ
	bit 7: LEFT…マウスの左ボタン状態
	    1= OFF
	    0= ON
	bit 6: MIDDLE…マウスの中ボタン状態■Undocumented
	    1= OFF
	    0= ON
	      * PC-9821A-E02(98ハイレゾボード)では未使用(常に1)。
	bit 5: RIGHT…マウスの右ボタン状態
	    1= OFF
	    0= ON
	bit 4: 未使用
	bit 3〜0: MD3〜MD0…SXY,SHLで選択されたカウンタの値
	解説  o 8255Aを「モード0入力」に設定し、マウスの状態取得に使用する。
	
	●0063h,Read/Write: 8255A ポートB リード/ライトデータ
	■PC-98XA
	bit 7: DIP SW 2-8の状態
	    1= OFF(外付けFDD #3,#4)
	    0= ON (外付けFDD #1,#2)
	bit 6: DIP SW 2-7の状態
	    未使用(1=OFF, 0=ON)
	bit 5〜0: DIP SW 2-6〜2-1の状態
	    増設プロテクトモードメモリ容量(1=OFF, 0=ON)
	    000000b=0KB
	    000001b=256KB
	    000010b=512KB
	       :
	    011111b=7936KB
	■PC-98XA以外
	bit 7: FDU…DIP SW 1-4の状態
	    1= OFF(外付けFDD #3,#4)
	    0= ON (外付けFDD #1,#2)
	bit 6: DIP SW 3-6の状態 ■Undocumented
	    1= OFF
	    0= ON
	    * PC-98RLのみ。ノーマルモードと同様にDIP SW 3-6の状態が読める。
	      ただし、ONにしても80000〜9FFFFhのメモリが切り離されるわけでは
	      ない。
	bit 5: 未使用
	bit 4: DIP SW 3-3の状態 ■PC-98RL,PC-9821A-E10
	    1= OFF(内蔵HDのDMAチャネル #0)
	    0= ON (内蔵HDのDMAチャネル #2)
		
	bit 3〜1: 未使用
	bit 0: MOD81…ハイレゾモード時の8/10MHzの切換えスイッチ
		1= 8MHz または 16MHz
		0=10MHz または 20MHz
	解説  o 8255Aを「モード0入力」に設定して、本体のDIP SWなどの状態取得に
		使用する。
	
	●0065h,Read: 8255A ポートC リードデータ
	bit 7〜4: 「ポートC ライトデータ」を参照
	bit 3: MODSW…ノーマル/ハイレゾモード状態 ■[PC-98XL・XL^2・RL]
	    0= ハイレゾモード
	      * PC-98XL・XL^2・RLでは、このビットにハイレゾ・ノーマルモード
		切り換えスイッチの状態が反映する。PC-98XAは0。
	bit 2: CPUSW…DIP SW 3-8の状態 ■[PC-98XL・XL^2・RL]
	    1= OFF(V30選択)
	    0= ON(80x86選択)
	    * DIP SW 3-8の状態が読める。このスイッチがOFFでも、ハイレゾ
	      モードでV30が動作することはない。
	bit 1: RS-2…RS-232C同期モードの設定状態
		1=ON
		0=OFF
	    * PC-98XAはDIP SW1-10,その他の機種はDIP SW 1-6
	bit 0: RS-1…RS-232C同期モードの設定状態
		1=ON
		0=OFF
	    * PC-98XAはDIP SW1-9,その他の機種はDIP SW 1-5
	    関連	DIP SW 1-6,1-5
	解説  o	8255Aに対して、bit 7〜4は「モード0出力」に設定しマウス
		インターフェースの制御に使用する。bit 3〜0は「モード0入力」に
		設定し本体のDIP SWなどの状態取得に使用する。
	
	●0067h,Write: 8255A ポートC ライトデータ
	bit 7: HC
	bit 6,5: SXY,SHL
	    11b= Y軸方向上位4ビットデータ
	    10b= Y軸方向下位4ビットデータ
	    01b= X軸方向上位4ビットデータ
	    00b= X軸方向下位4ビットデータ
	      * MD3〜MD0に出力するデータを選択
	bit 4: INT#
	    1= 割り込み禁止
	    0= 割り込み許可
	      * マウスのタイマ割り込み要求のマスク制御。割り込み禁止にすると、
		マウスインターフェースからの割り込み出力信号線はハイ
		インピーダンス状態になる。
	bit 3〜0: リードモードのため出力不可
		常に0000bを設定すること。
	解説  o	8255Aに対して、bit 7〜4は「モード0出力」に設定しマウス
		インターフェースの制御に使用する。bit 3〜0は「モード0入力」に
		設定し本体のDIP SWなどの状態取得に使用する。
		「0067h,Read」,「7FDDh,Write」を参照。
	
	●0067h,Write: コントロールレジスタ
	解説  o	8255Aのコントロールレジスタ。詳細は8255Aのデータシートを参照。